1 module hip.api.assets.assets_binding;
2 public import hip.api.data.commons;
3 public import hip.api.data.asset;
4 public import hip.api.data.font;
5 public import hip.api.data.textureatlas;
6 public import hip.api.data.tilemap;
7 public import hip.api.renderer.texture;
8 
9 version(ScriptAPI)
10 {
11     void initAssetManager()
12     {
13         import hip.api.internal;
14         loadClassFunctionPointers!(HipAssetsBinding, UseExportedClass.Yes, "HipAssetManager");
15         import hip.api.console;
16         log("HipengineAPI: Initialized AssetManager");
17     }
18 
19 
20     class HipAssetsBinding
21     {
22         extern(System) __gshared
23         {
24             ///Returns whether asset manager is loading anything
25             bool function(string file = __FILE__, uint line = __LINE__) isLoading;
26 
27             ///Stops the code from running and awaits asset manager to finish loading
28             void function() awaitLoad;
29 
30             ///Gets how many assets there is to load.
31             int function() getAssetsToLoadCount;
32             /** 
33             * Used for creating procedurally generated Tilemap:
34             ```d
35             IHipTilemap map = HipAssetManager.createTilemap(200, 200, 1, 1);
36             map.addTileset(HipAssetManager.tilesetFromSpritesheet(mySpritesheet));
37             HipTileLayer layer = map.addNewLayer("MyLayer", 200, 200);
38             //Define your tiles by accessing layer.tiles = []
39             ```
40             */
41             IHipTilemap function(uint width, uint height, uint tileWidth, uint tileHeight, bool isInfinite = false) createTilemap;
42 
43             /**
44              * Loads any type previously registered.
45              * Can be used for:
46              * - IImage
47              * - string
48              * - IHipINI
49              * - IHipTextureAtlas
50              * - IHipTexture
51              * - IHipTilemap
52              * - IHipTileset
53              * - IHipFont
54              */
55             IHipAssetLoadTask function (TypeInfo tID, string path, const(ubyte)[] extraData = null, string file = __FILE__, size_t line = __LINE__) loadAsset;
56 
57             /**
58              * Usage Example:
59              * registerAsset(typeid(Image), (string path, string f, size_t l) => new HipImageLoadTask(path,path,null,f,l));
60              */
61             void function(TypeInfo tID, IHipAssetLoadTask delegate(string path, const(ubyte)[] extraData, string file, size_t line) assetFactory) registerAsset;
62 
63             
64             /**
65             *   Reserved for deferred loading.
66             *   Use it on your own risk.
67             */
68             void function (IHipAssetLoadTask task, void delegate(HipAsset) onComplete) addOnCompleteHandler;
69 
70             HipAsset function(string name) getAsset;
71             string function(string name) getStringAsset;
72 
73             version(Have_util)
74             {
75                 public import hip.util.data_structures:Array2D, Array2D_GC;
76                 IHipTileset function(Array2D_GC!IHipTextureRegion spritesheet) tilesetFromSpritesheet;
77             }   
78             IHipTileset function(IHipTextureAtlas atlas) tilesetFromAtlas;
79 
80             //TODO: IHipAssetLoadTask function(string path) loadHapFile;
81         }
82     }
83     import hip.api.internal;
84     mixin ExpandClassFunctionPointers!HipAssetsBinding;
85 }
86 
87 
88 
89 
90 T get(T)(string name){return cast(T)getAsset(name); }
91 T get(T : string)(string name){return cast(T)getStringAsset(name);}